﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;


namespace FrbaCommerce.Abm_Visibilidad
{
    public partial class frm_modificarVisibilidad : Form
    {
        private DataRow visibilidadOriginal;
        private bool codValido = false;
        private bool descripValido = false;
        private bool camposObligatorios = false;

        public frm_modificarVisibilidad(DataRow visibilidad)
        {
            this.visibilidadOriginal = visibilidad;
            InitializeComponent();
        }

        private void frm_modificarVisibilidad_Load(object sender, EventArgs e)
        {
            txt_codVisibilidad.Text = Convert.ToString(visibilidadOriginal.Field<Decimal>("COD_VISIBILIDAD"));
            txt_descripVisibilidad.Text = visibilidadOriginal.Field<string>("DESCRIPCION");
            txt_precioVisibilidad.Text = Convert.ToString(visibilidadOriginal.Field<Decimal>("PRECIO_POR_PUBLICAR"));
            txt_porcentVisibilidad.Text = Convert.ToString(visibilidadOriginal.Field<Decimal>("PORCENTAJE_VENTA"));
        }

        private void btn_limpiar_Click(object sender, EventArgs e)
        {
            this.Controls.OfType<TextBox>().ToList().ForEach(textBox => textBox.Text = String.Empty);
        }

        private void btn_guardar_Click(object sender, EventArgs e)
        {
            this.verificar_campos_obligatorios();
            this.validar_codVisibilidad();
            this.validar_descripVisibilidad();

            if (codValido && descripValido && camposObligatorios)
            {
                BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.CommandText = "LOS_GDDES.SP_MODIFICAR_VISIBILIDAD";
                sqlCommand.CommandType = CommandType.StoredProcedure;
                sqlCommand.Parameters.AddWithValue("id_visibilidad", visibilidadOriginal.Field<Decimal>("ID_VISIBILIDAD"));
                sqlCommand.Parameters.AddWithValue("@cod_visibilidad", Convert.ToDecimal(txt_codVisibilidad.Text));
                sqlCommand.Parameters.AddWithValue("@descripcion", txt_descripVisibilidad.Text);
                sqlCommand.Parameters.AddWithValue("@precio_por_publicar", Convert.ToDecimal(txt_precioVisibilidad.Text));
                sqlCommand.Parameters.AddWithValue("@porcentaje_venta", Convert.ToDecimal(txt_porcentVisibilidad.Text));
                baseDeDatos.ejecuta(sqlCommand);

                this.Close();
            }
        }

        private void btn_cancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void txt_codVisibilidad_Leave(object sender, EventArgs e)
        {
            validar_codVisibilidad();
        }

        private void validar_codVisibilidad()
        {
            if (txt_codVisibilidad.Text == "")
            {
                txt_codVisibilidad.BackColor = Color.Red;
                codValido = false;
            }
            else if(txt_codVisibilidad.Text == visibilidadOriginal.Field<Decimal>("COD_VISIBILIDAD").ToString())
            {
                txt_codVisibilidad.BackColor = Color.White;
                codValido = true;
            }
            else
            {
                BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.CommandText = "SELECT COUNT(*) FROM LOS_GDDES.VISIBILIDADES " +
                                         "WHERE COD_VISIBILIDAD = @codigo AND BAJA_LOGICA = 0";
                sqlCommand.CommandType = CommandType.Text;
                sqlCommand.Parameters.AddWithValue("@codigo", txt_codVisibilidad.Text);
                int cod_existe = 0;
                cod_existe = baseDeDatos.ejecuta(sqlCommand);

                if (cod_existe > 0)
                {
                    txt_codVisibilidad.BackColor = Color.Red;
                    codValido = false;
                }
                else
                {
                    txt_codVisibilidad.BackColor = Color.White;
                    codValido = true;
                }
            }
        }

        private void txt_descripVisibilidad_Leave(object sender, EventArgs e)
        {
            validar_descripVisibilidad();
        }

        private void validar_descripVisibilidad()
        {
            if (txt_descripVisibilidad.Text == "")
            {
                txt_descripVisibilidad.BackColor = Color.Red;
                descripValido = false;
            }
            else if (txt_descripVisibilidad.Text == visibilidadOriginal.Field<string>("DESCRIPCION"))
            {
                txt_descripVisibilidad.BackColor = Color.White;
                descripValido = true;
            }
            else
            {
                BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.CommandText = "SELECT COUNT(*) FROM LOS_GDDES.VISIBILIDADES " +
                                         "WHERE DESCRIPCION = @descripcion AND BAJA_LOGICA = 0";
                sqlCommand.CommandType = CommandType.Text;
                sqlCommand.Parameters.AddWithValue("@descripcion", txt_descripVisibilidad.Text);
                int descrip_existe = 0;
                descrip_existe = baseDeDatos.ejecuta(sqlCommand);

                if (descrip_existe > 0)
                {
                    txt_descripVisibilidad.BackColor = Color.Red;
                    descripValido = false;
                }
                else
                {
                    txt_codVisibilidad.BackColor = Color.White;
                    descripValido = true;
                }
            }
        }

        //---Validar Campos Obligatorios Completos---//
        private void verificar_campos_obligatorios()
        {
            var camposObligatorios = new List<Control>();
            camposObligatorios.Add(txt_codVisibilidad);
            camposObligatorios.Add(txt_descripVisibilidad);
            camposObligatorios.Add(txt_porcentVisibilidad);
            camposObligatorios.Add(txt_precioVisibilidad);

            if (camposObligatorios.All<Control>(campos => campos.Text != ""))
                this.camposObligatorios = true;
            else
                this.camposObligatorios = false;

            var camposIncompletos = camposObligatorios.FindAll(campos => campos.Text == "");
            camposIncompletos.ForEach(campos => campos.BackColor = Color.Red);
            var camposCompletos = camposObligatorios.FindAll(campos => campos.Text != "");
            camposCompletos.ForEach(campos => campos.BackColor = Color.White);
        }
        //---Validar Campos Obligatorios Completos---//
    }
}
